package controle.aplicativo.apresentacao.controle;

import java.io.Serializable;
import java.util.Collection;

import javax.annotation.Resource;

import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

import controle.aplicativo.excecao.MensagemException;
import controle.aplicativo.negocio.aps.ManterParticipanteAPS;
import controle.aplicativo.negocio.entidade.Participante;
import controle.aplicativo.util.BeanAbstrato;

@Controller
@Scope("session")
public class ManterParticipanteBean extends BeanAbstrato implements Serializable {

	private static final long serialVersionUID = 6929316813623705850L;
	
	private Participante participante ;
	private Participante participanteAux;
	
	@Resource
	private transient ManterParticipanteAPS service;
	
	public void setService(ManterParticipanteAPS service) {
		this.service = service;
	}
	
	/**
	 * M�todo respons�vel por retornar uma consulta com todos os participantes
	 *  
	 * @return consulta
	 * @throws Exception
	 * @author waltenes.sardinha
	 */
	public Collection<Participante> getTodosParticipante() throws Exception {
		return this.service.consultarTodosParticipante();
	}
	
	/**
	 * M�todo respons�vel por salvar um participante no banco
	 * 
	 * @throws Exception
	 * @author waltenes.sardinha
	 */
	public void salvarParticipante() throws Exception{
		 
		try {
			String msg = this.service.salvarParticipante(this.getParticipante());
			limparCampos();
			this.setMensagem(msg, MSG_TIPO_INFORMACAO, "");
		}catch (final MensagemException e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_AVISO, "");
		}catch (final Exception e) {
			this.setMensagem(e.getMessage(), MSG_TIPO_ERRO, "");
		}
	}
	
	/**
	 * M�todo respons�vel por excluir um participante do banco
	 * 
	 * @throws Exception
	 * @author waltenes.sardinha
	 */
	public void exluirParticipante() throws Exception{
		
		try{
			String msg = this.service.excluirParticipante(this.getParticipanteAux());
			limparCampos();
			
			this.setMensagem(msg, MSG_TIPO_INFORMACAO, "");
		}catch (final MensagemException me){
			this.setMensagem(me.getMessage(), MSG_TIPO_AVISO, "");
		}catch (final Exception e){
			this.setMensagem(e.getMessage(), MSG_TIPO_ERRO, "");
		}
		limparCampos();
	}
	
	/**
	 * @return participante
	 */
	public Participante getParticipante() {
		if (participante == null) {
			participante = new Participante();
		}
		return participante;
	}
	
	/**
	 * M�todo que limpa os campos na tela
	 * 
	 * @author waltenes.sardinha
	 */
	public void limparCampos() {
		participante = null;
	}
	
	/**
	 * @param conta
	 */
	public void setParticipante(Participante conta){
		this.participante = conta;
	}
	
	/**
	 * @return participanteAux
	 */
	public Participante getParticipanteAux(){
		if (participanteAux == null){
			participanteAux = new Participante();
		}
		return participanteAux;
	}
	
	/**
	 * @param participanteAux
	 */
	public void setParticipanteAux(Participante participanteAux){
		this.participanteAux = participanteAux;
	}
}